import urllib.request
import re
import urllib
import chardet  # 需要导入这个模块，检测编码格式


# 得到网页内容
def getHtml(url):
    print("请求网页内容开始==================")
    try:
        print("爬取的网站地址为==============" + url)
        html = urllib.request.urlopen(url)
        result = html.read()
    except urllib.error.HTTPError as e:
        if hasattr(e, 'reason'):
            print('错误原因是' + str(e.reason))
    except urllib.error.URLError as e:
        if hasattr(e, 'code'):
            print('错误状态吗是' + str(e.code))
    else:
        print('请求成功！')
    return result
    print("请求网页内容结束======================")


result = getHtml("http://pic.yxdown.com/list/0_74_1.html#")
encode_type = chardet.detect(result)
result = result.decode(encode_type['encoding'])  # 进行相应解码，赋给原标识符（变量）


# 展示下载的进度
def cbk(a, b, c):
    '''''回调函数
    @a:已经下载的数据块
    @b:数据块的大小
    @c:远程文件的大小
    '''
    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    print("下载进度为=======================" + '%.2f%%' % per)


# 下载文件中的图片
def getImage(html):
    print("下载图片开始====================")
    reg = 'src="(http:.+?\.jpg)" alt='
    cp = re.compile(reg)
    print(cp)
    # print(html)
    images = re.findall(reg, html)
    x = 0
    for img in images:
        print(x)
        urllib.request.urlretrieve(img, './images/%s.jpg' % x, cbk)
        x += 1
    return images
    print("下载图片结束====================")


# 将结果保存到txt中
# 处理保存的文本文件的格式
def clearBlank(result_content):
    print("处理文本信息开始======================")
    with open('./one.txt', 'wb') as f:
        # 将内容保存到txt中
        f.write(result_content)
        print("保存文件完成==================")
        # 创建文件操作流对象
        file1 = open('./one.txt', 'r', encoding='utf-8')
        file2 = open('./two.txt', 'w', encoding='utf-8')
        try:
            for line in file1.readlines():
                if line == '\n':
                    line = line.strip("\n")
                file2.write(line)
        finally:
            f.close()
            file1.close()
            file2.close()
            print("处理文本信息结束=======================")


if __name__ == '__main__':
    getImage(result)
    clearBlank(getHtml("http://pic.yxdown.com/list/0_74_1.html#"))
